package com.qf.rabbitmq.work;

import com.qf.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.*;

import java.io.IOException;

//消费者
public class Consumer2 {


    //    声明了一个 队列名
    private static final String QUEUENAME="bk2102";

    public static void main(String[] args) throws Exception {
//        获取连接
        Connection connection = ConnectionUtil.getConnection();
//        声明通道
        Channel channel = connection.createChannel();
//      通过通道声明队列
        channel.queueDeclare(QUEUENAME,false,false, false, null);
//       每次服务器只拿一条消息来处理  处理完之后在拿下一条
        channel.basicQos(1);

        /*
         * 参数1  队列的名字
         * 参数2  自动应答   消息队列有提个保证机制，保证消费一定能投放到消费者身上，如果没有投放到 会重试，
         * 服务器如何认为消息已经被投放成功了  消费者给一个应答
         * 参数3  消费者
         * */
        channel.basicConsume(QUEUENAME,false,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//                这个方法是 处理 收到消息的方法
                System.out.println("消费者2收到的消息是："+new String(body));



                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //            手动应答
//                参数1   消息的标签
//                因为会有很多个消息 我们要告诉服务器应答的是哪一个
                //  参数2 批量应答tag 之前的所有tag   设置为false 只应答当前消息
//                channel.basicAck(envelope.getDeliveryTag(),false );

            }
        });


    }
}
